/*
 * Engranaje.h
 *
 *  Created on: 08/10/2013
 *      Author: juliansci
 */

#ifndef ENGRANAJE_H_
#define ENGRANAJE_H_

#include "Elemento.h"
#include "../fisica/EngranajeFisica.h"

class Engranaje: public Elemento {
private:
	double posCorreaX;
	double posCorreaY;
	Elemento* correaUnida;
	bool correaInicial;
	list<Elemento*>* listaEngranajesAsociados;

public:
	Engranaje(double x, double y, double ancho, double alto, string pathImagen);
	virtual ~Engranaje();
	void superponer(Elemento* elemento);
	int seSuperpone(Elemento* elemento);
	bool aceptaCorrea();
	void eliminarCorrea();
	void agregarCorreaInicial(Elemento* correa);
	void agregarCorreaFinal(Elemento* correa);
	void agregarEngranaje(Elemento* engranaje);
	list<Elemento*>* obtenerListaEngranajesAsociados();
	void eliminarEngranajeDeLista(Elemento*);
	bool engranajeEnLista(Elemento*);
	void mover(double centroX, double centroY);
	void eliminarReferencias(list<Elemento*>* elementosCanvas);
	bool asociadoAMotor();
	void agregarMotor(Elemento* motor);
	void actualizarPosicionCorrea();
	bool chequearIngresoCinta(Elemento* elemento);
	bool asociadoACorreaConMotor();
	void jointearElemento(b2World* world);
	Elemento* obtenerCorrea();
	bool estaAndando;

private:
	Elemento* elementoUnido;
};

#endif /* ENGRANAJE_H_ */
